package room.fachlogik;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;

import javax.swing.JOptionPane;

public class RoomFachlogik  implements Serializable
{
	/**
	 * 
	 */
	private static final long serialVersionUID = 8480036585117049480L;
    private final static String SPEICHER_DATEI = "room.fachlogik/room.ser";
	private ArrayList<Kunde> kunden;
	private ArrayList<Zimmer> zimm;
	private ArrayList<Buchenfachlogik> buch;
       
	public RoomFachlogik()
	{
		kunden = new ArrayList<Kunde>();
		zimm = new ArrayList<Zimmer>();
		buch = new ArrayList<Buchenfachlogik>();
		laden();
	}
	
	public void speichern()
	{
		try
		{	
            ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(SPEICHER_DATEI));
            out.writeObject(kunden);
        //    out.writeObject(zimm);
          //  out.writeObject(buch);
            out.close();
            JOptionPane.showMessageDialog(null, "Daten gespeichert", "Daten gespeichert", 0);
        }  catch (IOException e)
        {
            JOptionPane.showMessageDialog(null, "Es ist ein unbekannter Fehler beim Speichern aufgetreten!", "Fehler!", 0 );
        } catch(Exception e)
        {
            JOptionPane.showMessageDialog(null, this, e.getMessage(), 0);            
        }
    }
	
	private void laden()
	{
	    try
        {
            ObjectInputStream in = new ObjectInputStream(new FileInputStream(SPEICHER_DATEI));
         //   kunden = (ArrayList<Kunde>) in.readObject();
            in.close();
            
        } catch (FileNotFoundException e)
        {
            // kunden = new Kunde();

        	JOptionPane.showMessageDialog(null, "Sie starten das Programm zum 1. Mal!", "Willkommen!", 0 );
        	//System.out.println("erster Programmstart");
        } catch (Exception e)
        {
            e.printStackTrace();
            JOptionPane.showMessageDialog(null, this, "Fehler beim Laden der Daten", 0);
        }
	}
	
	public void addKunde(Kunde kunde)
	{
		kunden.add(kunde);
	}      
	public void addZimmer(Zimmer z)
	{
		zimm.add(z);
	}
	public void addBuchen(Buchenfachlogik b)
	{
		buch.add(b);
	}
	public void loeschenZimmer(Zimmer zimmer)
	{
		zimm.remove(zimmer);
	}
	public void loeschenKunde(Kunde kunde)
	{
		kunden.remove(kunde);
	}
	public void loeschenBuchen(Buchenfachlogik b)
	{
		buch.remove(b);
	}
	public ArrayList<Kunde> getKunden()
	{
		return kunden;
	}
	public ArrayList<Zimmer> getZimm()
	{
		return zimm;
	}
	public ArrayList<Buchenfachlogik> getBuch()
	{
		return buch;
	}
	public String listeZimmer()
	{
		Collections.sort(zimm);
		StringBuilder str = new StringBuilder("ZimmerNr.:\tZimmername:");
		str.append("\n==============================================");
		for (Zimmer z : zimm)
			str.append("\n").append(z);
		return str.toString();
	}
	public String listeKunden()
	{
		Collections.sort(kunden);
		StringBuilder str = new StringBuilder("Vorname:\tNachname:");
		str.append("\n==============================================");
		for (Kunde e : kunden)
			str.append("\n").append(e);
		return str.toString();          
	}
	public String ListeBuchen()
	{
		Collections.sort(buch);
		StringBuilder str = new StringBuilder("Zimmername:\tKunden:\tVon:\tBis:");
		str.append("\n==============================================");
		for (Buchenfachlogik b : buch)
			str.append("\n").append(b);
		return str.toString();
	}
	public Iterator<Zimmer> zimmerIterator()
	{
		return zimm.iterator();
	}
	public Iterator<Kunde> kundenIterator()
	{
		return kunden.iterator();
	}
	public Iterator<Buchenfachlogik> BuchenIterator()
	{
		return buch.iterator();
	}
}


